package cn.ccccltd.waf.id_generator.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import javax.servlet.http.HttpServletResponse;

public class CommonUtils {

	
	/**邮箱*/
	private static final String EMAIL_REGEX = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
	/**手机号*/
	private static final String CHINA_REGEX = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
	private static final String HK_REGEX = "^(5|6|8|9)\\d{7}$";

    /**
     * 功能: 大陆号码或香港号码均可<br>
     * 作者: yangjingjiang <br>
     * 创建日期:2017年11月17日 <br>
     * 修改者: mender <br>
     * 修改日期: modifydate <br>
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static boolean isPhone(String str)throws PatternSyntaxException {    
        return isChinaPhoneLegal(str) || isHKPhoneLegal(str);    
    }    
    
    /**
     * 功能:     
     * 大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数  
     * 此方法中前三位格式有：  
     * 13+任意数  
     * 15+除4的任意数  
     * 18+除1和4的任意数  
     * 17+除9的任意数  
     * 147<br>
     * 作者: yangjingjiang <br>
     * 创建日期:2017年11月17日 <br>
     * 修改者: mender <br>
     * 修改日期: modifydate <br>
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {  
    	
        return Pattern.matches(CHINA_REGEX, str); 
    	
    }    
    
    /**
     * 功能: 香港手机号码8位数，5|6|8|9开头+7位任意数  <br>
     * 作者: yangjingjiang <br>
     * 创建日期:2017年11月17日 <br>
     * 修改者: mender <br>
     * 修改日期: modifydate <br>
     * @param str
     * @return
     * @throws PatternSyntaxException
     */
    public static boolean isHKPhoneLegal(String str)throws PatternSyntaxException {    

    	return Pattern.matches(HK_REGEX, str);
        
    }  
	
	/**
	 * 功能: 邮箱格式校验<br>
	 * 作者: yangjingjiang <br>
	 * 创建日期:2017年11月18日 <br>
	 * 修改者: mender <br>
	 * 修改日期: modifydate <br>
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email) {
		
		return Pattern.matches(EMAIL_REGEX, email);
		
	}
	
	/**
	 * 功能: 返回32位的UUID<br>
	 * 作者: yangjingjiang <br>
	 * 创建日期:2017年10月31日 <br>
	 * 修改者: mender <br>
	 * 修改日期: modifydate <br>
	 * @return
	 */
	public static String getUUID(){
		
		return UUID.randomUUID().toString().replace("-", "");
		
	}
	
	/**
	 * 数组合并
	 * @param first
	 * @param second
	 * @return
	 */
	public static Object[] concat(Object[] first, Object second) {
		Object[] result = Arrays.copyOf(first, first.length + 1);
		System.arraycopy(second, 0, result, first.length, 1);
		return result;
	}

	/**
	 * 数组合并
	 * @param first
	 * @param second
	 * @return
	 */
	public static Object[] concat(Object[] first, Object... second) {
		Object[] result = new Object[first.length + second.length];
		System.arraycopy(first, 0, result, 0, first.length);
		System.arraycopy(second, 0, result, first.length, second.length);
		return result;
	}
	
	/**
	 * 功能: 验证内容长度<br>
	 * 作者: yangjingjiang <br>
	 * 创建日期:2017年11月23日 <br>
	 * 修改者: mender <br>
	 * 修改日期: modifydate <br>
	 * @param sms
	 * @return
	 */
	public static boolean smsContentTooLong(String smsTopic){
		
		if(smsTopic.length()<=70){
			return true;
		}else{
			return false;
		}
		
	}
	
	/**
	 * 功能: qq邮箱的主题最大限制<br>
	 * 作者: yangjingjiang <br>
	 * 创建日期:2017年11月23日 <br>
	 * 修改者: mender <br>
	 * 修改日期: modifydate <br>
	 * @param email
	 * @return
	 */
	public static boolean emailTopicTooLong(String emailTopic){
		
		if(emailTopic.length()<=120){
			return true;
		}else{
			return false;
		}
		
	}
	
	

	
	/**
	 * 输出JSON格式数据。
	 * <p>
	 * 把任意类型的数据对象转换成JSON格式字符串后，通过HTTP响应对象输出到请求端
	 * （响应内容的类型设置为"application/json;charset=utf-8"）
	 * 
	 * @param response
	 *            HTTP响应对象
	 * @param obj
	 *            待输出的数据对象
	 */

	public static void writeJsonToPage(HttpServletResponse response, Object responseObject) {

		//将实体对象转换为JSON Object转换  
	    String responseString = JsonUtils.toJson(responseObject);
	    response.setCharacterEncoding("UTF-8");  
	    response.setContentType("application/json; charset=utf-8");  
	    PrintWriter out = null;  
	    try {  
	        out = response.getWriter();  
	        out.append(responseString);  
	    } catch (IOException e) {  
	        e.printStackTrace();  
	    } finally {  
	        if (out != null) {  
	            out.close();  
	        }  
	    }  
	}
	
	/**
	 * 功能: 获取异常详细<br>
	 * 作者: yangjingjiang <br>
	 * 创建日期:2017年11月16日 <br>
	 * 修改者: mender <br>
	 * 修改日期: modifydate <br>
	 * @param e
	 * @return
	 */
	public static String getExceptionStackTrace(Exception e) {

		StringWriter sw = null;
		PrintWriter pw = null;

		try {
			sw = new StringWriter();
			pw = new PrintWriter(sw);

			// 将出错的栈信息输出到printWriter中
			e.printStackTrace(pw);

			pw.flush();
			sw.flush();

		} finally {
			if (sw != null) {
				try {
					sw.close();
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
			if (pw != null) {
				pw.close();
			}
		}
		
		return (sw == null) ? "" : "<pre>" + sw.toString().replaceAll("\r\n", "<br>") + "</pre>";
	}
	
}
